package KontrolLag;
import ModelLag.*;
import java.lang.Exception.*;

/**
 * Klasse som styrer alt hvad der har med objekter af typen Person at goere.
 */
public class PersonCtr
{
    // instance variables - replace the example below with your own
    private PersonContainer personContainer;
    private static PersonCtr instance;

    /**
     * Construktor til klassen PersonCtr
     */
    private PersonCtr()
    {
        personContainer = PersonContainer.getInstance(); 
    }

    /**
     * singleton
     */
    public static PersonCtr getInstance()
    {
        if(instance == null)
        {
            instance = new PersonCtr();
        }
        return instance;
    }

    /**
     * metode som opretter et Kunde objekt med dets parametre
     * @param name, adresse, postNr, by, telefonNummer, rabat, cvrNr, brugere
     */
    public void opretKunde(String name, String adresse, String postNr, String by, String telefonNummer, long rabat, String cvrNr, String brugere) throws Exception
    {
        try
        {
            Person p = findPerson(telefonNummer);
            if(p != null)
            {
                throw new Exception("Det telefon nummer eksistere allerede i registret");            
            }
            else
            {
                p = new Kunde(name, adresse, postNr, by, telefonNummer, rabat, cvrNr, brugere);
                personContainer.tilfoejPerson(p);
            }
        }
        catch(IndexOutOfBoundsException i)
        {
            Person p = new Kunde(name, adresse, postNr, by, telefonNummer, rabat, cvrNr, brugere);
            personContainer.tilfoejPerson(p);
        }
    }
/**
     * metode som opretter et Leverandoor objekt med dets parametre
     * @param name, adresse, postNr, by, telefonNummer, indkoebsRabat, kommentar
     */

    public void opretLeverandoor(String name, String adresse, String postNr, String by, String telefonNummer, long indkoebsRabat, String kommentar)throws Exception
    {
        try
        {
            Person p = findPerson(telefonNummer);
            if(p != null)
            {
                throw new Exception("Det telefon nummer eksistere allerede i registret");            
            }
            else
            {
                p = new Leverandoor(name, adresse, postNr, by, telefonNummer, indkoebsRabat, kommentar);
                personContainer.tilfoejPerson(p);
            }
        }
        catch(IndexOutOfBoundsException i)
        {
            Person p = new Leverandoor(name, adresse, postNr, by, telefonNummer, indkoebsRabat, kommentar);
            personContainer.tilfoejPerson(p);
        }
    }

    /**
     * metode som opretter et Personale objekt med dets parametre
     * @param name, adresse, postNr, by, telefonNummer, rabat
     */
    public void opretPersonale(String name, String adresse, String postNr, String by, String telefonNummer, long rabat)
    {
        Person p = new Personale(name, adresse, postNr, by, telefonNummer, rabat);
        personContainer.tilfoejPerson(p);
    }
    
    /**
     * metode som finder et Person objekt ud fra et givent tlfNr
     * @param tlfNr
     * @returns Person som er fundet
     */
    public Person findPerson(String tlfNr)
    {
        Person p = personContainer.findPerson(tlfNr);
        return p;
    }

    /**
     * metode som sletter et Person objekt hvis det findes. Smider en exception hvis det ikke findes.
     * @param tlfNr
     */
    public void sletPerson(String tlfNr) throws Exception
    {
        Person p = findPerson(tlfNr);
        if(p == null)
        {
            throw new Exception ("Ingen ved det telefon nummer eksistere");
        }
        personContainer.sletPerson(p);

    }

}
